//配对交换。编写程序，交换某个整数的奇数位和偶数位，尽量使用较少的指令（也就是说，位 0 与位 1 交换，位 2 与位 3 交换，以此类推）。 
//
// 示例 1： 
//
// 
// 输入：num = 2（或者 0b10）
// 输出：1 (或者 0b01)
// 
//
// 示例 2： 
//
// 
// 输入：num = 3
// 输出：3
// 
//
// 提示: 
//
// 
// num 的范围在[0, 2³⁰ - 1]之间，不会发生整数溢出。 
// 
//
// Related Topics 位运算 👍 97 👎 0


package LeetCode.editor.cn;

/**
 * @author ldltd
 * @date 2025-07-17 00:10:21
 * @description 面试题 05.07.配对交换
 */
public class ExchangeLcci{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 ExchangeLcci fun=new ExchangeLcci();
	 	 Solution solution = fun.new Solution();

	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int exchangeBits(int num) {
        //可以直接每次取出奇数位和偶数位，然后左移或右移
		int oddBits = num & 0xAAAAAAAA; // 获取奇数位
		int evenBits = num & 0x55555555; // 获取偶数位
		oddBits >>= 1; // 奇数位右移一位
		evenBits <<= 1; // 偶数位左移一位
		return oddBits | evenBits; // 合并奇数位和偶数位
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
